package com.ng.framework.persistence;

import java.util.List;

public interface NGGenericPersistence<T> {

	/**
	 * Buscar por id.
	 * 
	 * @param id
	 *            El id de la entidad
	 * @return Un Objeto tipo del Generico
	 */
	public abstract T findById(Long id);

	/**
	 * Guarda un objeto en la base de datos.
	 * 
	 * @param entity
	 *            Objeto a guardar
	 * @return Objeto ya guardado
	 */
	public abstract T create(T object);

	/**
	 * Actualiza un objeto en la base de datos.
	 * 
	 * @param entity
	 *            Objeto a actualizar
	 * @return Objeto ya guardado
	 */
	public abstract T update(T object);

	/**
	 * Removes un objeto de la base de datos.
	 * 
	 * @param object
	 *            Objeto a borrar
	 */
	public abstract void remove(T object);

	/**
	 * Gets the all.
	 * 
	 * @param criteria
	 * 
	 * @return the all
	 */
	public abstract List<T> getAll(NGSearchCriteria criteria);

	/**
	 * Buscar todos.
	 * 
	 * @return Lista de Genericos
	 */
	public abstract List<T> getAll();

	boolean checkIfTableExists(String tableName);
}
